#Boa:Dialog:Dialog1

import wx
import wx.grid
import utiles
import consultasBD
from decimal import Decimal

GRIS = ( 220, 220, 220, 255)
NEGRO = ( 0, 0, 0, 255)
VERDENEGRO = ( 47, 79, 79, 255)
BLANCO = (255, 255, 255, 255)

def create(parent):
    return Dialog1(parent)

[wxID_DIALOG1, wxID_DIALOG1BUTTON1, wxID_DIALOG1BUTTON2, wxID_DIALOG1BUTTON3, 
 wxID_DIALOG1BUTTON4, wxID_DIALOG1CHECKBOX1, wxID_DIALOG1DATEPICKERCTRL1, 
 wxID_DIALOG1GRID1, wxID_DIALOG1STATICTEXT1, wxID_DIALOG1STATICTEXT2, 
 wxID_DIALOG1STATICTEXT3, wxID_DIALOG1STATICTEXT4, wxID_DIALOG1STATICTEXT5, 
 wxID_DIALOG1TEXTCTRL1, wxID_DIALOG1TEXTCTRL2, wxID_DIALOG1TEXTCTRL3, 
 wxID_DIALOG1TEXTCTRL4, 
] = [wx.NewId() for _init_ctrls in range(17)]

class Dialog1(wx.Dialog):
    def _init_ctrls(self, prnt):
        # generated method, don't edit
        wx.Dialog.__init__(self, id=wxID_DIALOG1, name='', parent=prnt,
              pos=wx.Point(72, 94), size=wx.Size(808, 486),
              style=wx.DEFAULT_DIALOG_STYLE,
              title='Historico Cambio de Precios')
        self.SetClientSize(wx.Size(800, 459))

        self.staticText1 = wx.StaticText(id=wxID_DIALOG1STATICTEXT1,
              label='P.T.C.', name='staticText1', parent=self, pos=wx.Point(8,
              8), size=wx.Size(31, 13), style=0)

        self.textCtrl1 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL1, name='textCtrl1',
              parent=self, pos=wx.Point(8, 24), size=wx.Size(72, 21), style=0,
              value='')

        self.textCtrl2 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL2, name='textCtrl2',
              parent=self, pos=wx.Point(88, 24), size=wx.Size(72, 21), style=0,
              value='')

        self.textCtrl3 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL3, name='textCtrl3',
              parent=self, pos=wx.Point(168, 24), size=wx.Size(72, 21), style=0,
              value='')
        self.textCtrl3.Bind(wx.EVT_KILL_FOCUS, self.OnKillId)

        self.textCtrl4 = wx.TextCtrl(id=wxID_DIALOG1TEXTCTRL4, name='textCtrl4',
              parent=self, pos=wx.Point(240, 24), size=wx.Size(184, 21),
              style=0, value='')
        self.textCtrl4.Bind(wx.EVT_KILL_FOCUS, self.OnKillNombre)

        self.staticText2 = wx.StaticText(id=wxID_DIALOG1STATICTEXT2,
              label='Cod.Sussan', name='staticText2', parent=self,
              pos=wx.Point(88, 8), size=wx.Size(57, 13), style=0)

        self.staticText3 = wx.StaticText(id=wxID_DIALOG1STATICTEXT3,
              label='desde la fecha', name='staticText3', parent=self,
              pos=wx.Point(440, 8), size=wx.Size(70, 13), style=0)

        self.datePickerCtrl1 = wx.DatePickerCtrl(id=wxID_DIALOG1DATEPICKERCTRL1,
              name='datePickerCtrl1', parent=self, pos=wx.Point(440, 24),
              size=wx.Size(80, 21), style=wx.DP_DROPDOWN | wx.DP_SHOWCENTURY)
        self.datePickerCtrl1.Enable(False)

        self.checkBox1 = wx.CheckBox(id=wxID_DIALOG1CHECKBOX1, label='Ignorar',
              name='checkBox1', parent=self, pos=wx.Point(528, 24),
              size=wx.Size(64, 13), style=0)
        self.checkBox1.SetValue(True)
        self.checkBox1.Bind(wx.EVT_CHECKBOX, self.OnCambiaCheck1,
              id=wxID_DIALOG1CHECKBOX1)

        self.staticText4 = wx.StaticText(id=wxID_DIALOG1STATICTEXT4,
              label='fecha', name='staticText4', parent=self, pos=wx.Point(546,
              38), size=wx.Size(27, 13), style=0)

        self.button1 = wx.Button(id=wxID_DIALOG1BUTTON1, label='Buscar',
              name='button1', parent=self, pos=wx.Point(608, 24),
              size=wx.Size(75, 23), style=0)
        self.button1.Bind(wx.EVT_BUTTON, self.OnBuscar, id=wxID_DIALOG1BUTTON1)

        self.button4 = wx.Button(id=wxID_DIALOG1BUTTON4, label='Imprimir',
              name='button4', parent=self, pos=wx.Point(8, 432),
              size=wx.Size(75, 23), style=0)
        self.button4.Bind(wx.EVT_BUTTON, self.OnImprimir,
              id=wxID_DIALOG1BUTTON4)

        self.button2 = wx.Button(id=wxID_DIALOG1BUTTON2, label='Limpiar',
              name='button2', parent=self, pos=wx.Point(632, 432),
              size=wx.Size(75, 23), style=0)
        self.button2.Bind(wx.EVT_BUTTON, self.OnLimpiar, id=wxID_DIALOG1BUTTON2)

        self.button3 = wx.Button(id=wxID_DIALOG1BUTTON3, label='Salir',
              name='button3', parent=self, pos=wx.Point(720, 432),
              size=wx.Size(75, 23), style=0)
        self.button3.Bind(wx.EVT_BUTTON, self.OnSalir, id=wxID_DIALOG1BUTTON3)

        self.grid1 = wx.grid.Grid(id=wxID_DIALOG1GRID1, name='grid1',
              parent=self, pos=wx.Point(8, 56), size=wx.Size(784, 368),
              style=0)

        self.staticText5 = wx.StaticText(id=wxID_DIALOG1STATICTEXT5,
              label='Proveedor (codigo / nombre)', name='staticText5',
              parent=self, pos=wx.Point(168, 8), size=wx.Size(138, 13),
              style=0)

    def __init__(self, parent):
        self._init_ctrls(parent)
        self.crearGrilla()

    def ajustarAnchoColumnas(self):
        for y in xrange(self.grid1.GetNumberCols()):
            self.grid1.AutoSizeColumn(y,True)

    def crearGrilla(self):
        #Fecha,PTC,CodSussan,Descripcion,Talle,Color,Proveedor,PrecioViejo,PrecioNuevo
        #0     1   2         3           4     5     6         7           8     
        columnas = ['Fecha','P.T.C.','Cod.\nSussan','Descripcion','Talle','Color','Proveedor','Costo','Precio\nAnterior','Nuevo\nPrecio']
        self.grid1.CreateGrid(1,len(columnas))
        for i, col in enumerate(columnas): 
            self.grid1.SetColLabelValue(i, col)

        self.grid1.SetSelectionMode(wx.grid.Grid.wxGridSelectRows)
        self.grid1.EnableEditing(False)
        self.ajustarAnchoColumnas()
        self.grid1.Refresh()

    def OnSalir(self, event):
        self.Close()

    def OnCambiaCheck1(self, event):
        if self.checkBox1.GetValue():
            self.datePickerCtrl1.Enable(False)
        else:
            self.datePickerCtrl1.Enable(True)

    def OnBuscar(self, event):
        if self.checkBox1.GetValue() and \
           self.textCtrl1.GetLabel() == "" and \
           self.textCtrl2.GetLabel() == "" and \
           self.textCtrl3.GetLabel() == "" and \
           self.textCtrl4.GetLabel() == "":
               utiles.mensaje(None,"Debe especificar algun parametro de busqueda")
               self.textCtrl1.SetFocus()
        opcion1 = " 1 "
        if self.textCtrl1.GetValue() != "":
            opcion1 = " cb.ptc='"+self.textCtrl1.GetValue()+"' "
        opcion2 = ""
        if self.textCtrl2.GetValue() != "":
            opcion2 = " AND cb.codsussan='"+self.textCtrl2.GetValue()+"' "
        opcion3 = ""
        if not self.checkBox1.GetValue():
            fecha = str(self.datePickerCtrl1.GetLabel())
            fecha = fecha.replace("/","-")
            fecha = utiles.invertirFecha(fecha)
            opcion3 = " AND cb.fecha>='"+fecha+"' "
        opcion4 = "\n"
        if self.textCtrl3.GetLabel()!="":
            opcion4 = " AND pv.idproveedor='"+self.textCtrl3.GetLabel()+"' \n"

        r1 = "SELECT cb.fecha,cb.ptc,cb.codsussan,p.descri,ptc.talle, \n"
        r2 = "       ptc.color,co.nombre AS nombrecolor,pv.nombre, \n"
        r3 = "       pv.idproveedor,p.preciocompra,cb.precioViejo,cb.precioNuevo  \n"
        r4 = "FROM cambiosprecios cb, productos p, colores co, proveedor pv, \n"
        r5 = "     producto_talle_color ptc \n"
        r6 = "WHERE "+opcion1+opcion2+opcion3+" \n"
        r7 = "  AND cb.ptc=ptc.id AND ptc.color=co.idcolor \n"
        r8 = "  AND cb.codsussan=p.codsussan \n"
        r9 = "  AND p.proveedor=pv.idproveedor "+opcion4
        r0 = "ORDER BY fecha,ptc,codsussan "
        sql=r1+r2+r3+r4+r5+r6+r7+r8+r9+r0
        
        resultados = consultasBD.ordenCrudaDict(sql)
        renglon = 0
        for item in resultados:
            fecha = str(item["fecha"])
            fecha = utiles.invertirFecha2(fecha)
            ptc = item["ptc"]
            codsussan = item["codsussan"]
            descripcion = item["descri"]
            talle = item["talle"]
            color = item["nombrecolor"]+"/"+str(item["color"])
            proveedor = item["nombre"]+"/"+str(item["idproveedor"])
            preciocompra = Decimal(str(item["preciocompra"])).quantize(Decimal("0.10"))
            preciocompra = str(preciocompra)
            precioviejo = Decimal(str(item["precioViejo"])).quantize(Decimal("0.10"))
            precioviejo = str(precioviejo)
            precionuevo = Decimal(str(item["precioNuevo"])).quantize(Decimal("0.10"))
            precionuevo = str(precionuevo)
            
            #Fecha,PTC,CodSussan,Descripcion,Talle,Color,Proveedor,PrecioCompra,PrecioViejo,PrecioNuevo
            #0     1   2         3           4     5     6         7            8           9
            self.grid1.SetCellValue(renglon,0,fecha)
            self.grid1.SetCellValue(renglon,1,ptc)
            self.grid1.SetCellValue(renglon,2,codsussan)
            self.grid1.SetCellValue(renglon,3,descripcion)
            self.grid1.SetCellValue(renglon,4,talle)
            self.grid1.SetCellValue(renglon,5,color)
            self.grid1.SetCellValue(renglon,6,proveedor)
            self.grid1.SetCellValue(renglon,7,preciocompra)
            self.grid1.SetCellValue(renglon,8,precioviejo)
            self.grid1.SetCellValue(renglon,9,precionuevo)

            self.grid1.SetCellAlignment(renglon, 0, wx.ALIGN_CENTRE, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(renglon, 7, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(renglon, 8, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            self.grid1.SetCellAlignment(renglon, 9, wx.ALIGN_RIGHT, wx.ALIGN_CENTRE)
            
            renglon+= 1
            self.grid1.AppendRows()
            
        self.ajustarAnchoColumnas()
        self.habilitar(False)

    def habilitar(self,valor=True):
        self.textCtrl1.Enable(valor)
        self.textCtrl2.Enable(valor)
        self.datePickerCtrl1.Enable(valor)
        self.checkBox1.Enable(valor)
        self.staticText4.Enable(valor)
        self.button1.Enable(valor)
        self.button4.Enable(not valor)

    def OnLimpiar(self, event):
        self.habilitar()
        self.textCtrl1.SetLabel("")
        self.textCtrl2.SetLabel("")
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        self.checkBox1.SetValue(True)
        self.datePickerCtrl1.Enable(False)
        self.grid1.ClearGrid()
        for fil in xrange(self.grid1.GetNumberRows()):
            self.grid1.DeleteRows()
        self.grid1.AppendRows()
        self.textCtrl1.SetFocus()
    
    def OnImprimir(self, event):
        print "Imprimir"
        #Fecha,PTC,CodSussan,Descripcion,Talle,Color,Proveedor,PrecioViejo,PrecioNuevo
        #0     1   2         3           4     5     6         7           8     

        f=open("c:\\matrisamor.doc\\reporte-CambiosDePrecios.html","w")
        numeroPagina = 1
        nrosuc,nombresuc = utiles.datosSucursal()
        
        totalItemPorPagina = 55
        totalPaginas = int(self.grid1.GetNumberRows()-1) / totalItemPorPagina 
        totalPaginas+= 1

        def encabezadoPagina(texto):
            fecha = utiles.getfechaTime()

            a = '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'SUSSAN BOUTIQUE<br>Cambios de Precios'
            a+= '<br></td>\n'
            a+= '<td valign="center" align="left" width="34%">'
            a+= '<br>'
            a+= '</td>\n'
            a+= '<td valign="center" align="right" width="33%">'+fecha
            a+= '<br>P&aacute;gina '+str(numeroPagina)+' / '+str(totalPaginas)+'</td>\n'
            a+= '</tr>\n'
            a+= '</table>\n'

            ptc = ""
            if self.textCtrl1.GetLabel()!="":
                ptc = " PTC "+self.textCtrl1.GetLabel()
            codsussan = ""
            if self.textCtrl1.GetLabel()!="":
                codsussan = " CodSussan "+self.textCtrl2.GetLabel()
            fecha = ""
            if not self.checkBox1.GetValue():
                fecha = " Fecha: "+str(self.datePickerCtrl1.GetLabel())
            aux = ptc+codsussan+fecha
            
            a+= '<table width="100%" cellspacing="0" border="0">\n'
            a+= '<tr>\n'
            a+= '<td valign="center" align="left" width="33%">'
            a+= 'Parametros de b&uacute;squeda: '+aux+'\n'
            a+= '</td>'
            a+= '</tr>\n'
            a+= '</table>\n<hr>'
            texto+= a
            return texto
        
        def encabezadoTabla(texto):
        #Fecha,PTC,CodSussan,Descripcion,Talle,Color,Proveedor,PrecioViejo,PrecioNuevo
        #0     1   2         3           4     5     6         7           8     
            a = '<hr>'

            tama = '"0.05"'
            a+= '<table width="100%" cellspacing="1" border="1"> \n'
            a+= '<tr>\n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Orden</font></td> \n'
            a+= '<td valign="top" align="center"><font size='+tama+'>Fecha</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>PTC</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>CodSussan</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Descripci&oacute;n</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Talle</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Color</font></td> \n'
            a+= '<td valign="top" align="left"><font size='+tama+'>Proveedor</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Precio<br>Anterior</font></td> \n'
            a+= '<td valign="top" align="right"><font size='+tama+'>Precio<br>Nuevo</font></td> \n'
            a+= '</tr> \n'
            a+= '<tr>\n'
            a+= '<td colspan="10"></td>\n'
            a+= '</tr>\n'
            texto+= a
            return texto
        
        cadena = '<?xml version="1.0" encoding="utf-8" ?> \n'
        cadena+= '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> \n'
        cadena+= '<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> \n'
        cadena+= '<head> \n'
        cadena+= '<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> \n'
        cadena+= '<meta name="generator" content="Docutils 0.4.1: http://docutils.sourceforge.net/" /> \n'
        cadena+= '<title>Sussan Boutique</title> \n'
        cadena+= '</head> \n'
        cadena+= '<body> \n'

        cadena = encabezadoPagina(cadena)
        cadena = encabezadoTabla(cadena)
        f.write(cadena)

        orden = 0
        renglon = 0
        for i in xrange(self.grid1.GetNumberRows()):
        #Fecha,PTC,CodSussan,Descripcion,Talle,Color,Proveedor,PrecioViejo,PrecioNuevo
        #0     1   2         3           4     5     6         7           8     
            if self.grid1.GetCellValue(i,0)=="":
                continue
            orden+= 1
            fecha = self.grid1.GetCellValue(i,0)
            ptc = self.grid1.GetCellValue(i,1)
            codsussan = self.grid1.GetCellValue(i,2)
            descripcion = self.grid1.GetCellValue(i,3)
            talle = self.grid1.GetCellValue(i,4)
            color = self.grid1.GetCellValue(i,5)
            proveedor = self.grid1.GetCellValue(i,6)
            precioviejo = self.grid1.GetCellValue(i,7)
            precionuevo = self.grid1.GetCellValue(i,8)
            
            tama = '"0.2"'
            cadena = '<tr> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+str(orden)+'</font></td> \n'
            cadena+= '<td valign="top" align="center"><font size='+tama+'>'+fecha+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+ptc+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+codsussan+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+descripcion+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+talle+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+color+'</font></td> \n'
            cadena+= '<td valign="top" align="left"><font size='+tama+'>'+proveedor+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+precioviejo+'</font></td> \n'
            cadena+= '<td valign="top" align="right"><font size='+tama+'>'+precionuevo+'</font></td> \n'
            cadena+= '</tr>\n'
            f.write(cadena)
            
            renglon+= 1
            
            if renglon == totalItemPorPagina :
                f.write("</table><!-- salto de pagina -->\n")
                f.write("<p STYLE='page-break-after: always;'></p>\n")
                renglon = 0
                numeroPagina+= 1
                cadena = encabezadoPagina("")
                cadena = encabezadoTabla(cadena)
                f.write(cadena)

        tama = '"0.2"'
            
        cadena = '</table>\n'
        f.write(cadena)
        f.close()

        import os
        os.system("taskkill /IM firefox.exe /F")
        os.system("c:\\explorer.lnk c:\\matrisamor.doc\\reporte-CambiosDePrecios.html")

    def OnKillId(self, event):
        idproveedor = self.textCtrl3.GetLabel()
        if idproveedor == "": return
        self.buscarProveedor()

    def OnKillNombre(self, event):
        nombre = self.textCtrl4.GetLabel()
        if nombre == "": return
        self.buscarProveedor()
        
    def buscarProveedor(self):
        nombreproveedor = self.textCtrl4.GetLabel()
        codigoproveedor = self.textCtrl3.GetLabel()
        if codigoproveedor != "":
            r1 = "SELECT idproveedor,nombre "
            r2 = "FROM proveedor WHERE idproveedor = '"+codigoproveedor+"' "
            consultaSQL = r1+r2
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != ():
                proveedor = resultado[0]
                self.textCtrl3.SetLabel(proveedor["idproveedor"])
                self.textCtrl4.SetLabel(proveedor["nombre"])
                self.datePickerCtrl1.SetFocus()
                return
            self.textCtrl3.SetLabel("")
            self.textCtrl4.SetLabel("")
            return
        if nombreproveedor != "":
            consultaSQL = "SELECT idproveedor,nombre FROM proveedor WHERE nombre LIKE '%"+nombreproveedor+"%' "
            resultado = consultasBD.ordenCrudaDict(consultaSQL)
            if resultado != () and len(resultado)==1:
                proveedor = resultado[0]
                self.textCtrl3.SetLabel(proveedor["idproveedor"])
                self.textCtrl4.SetLabel(proveedor["nombre"])
                self.datePickerCtrl1.SetFocus()
                return
        import BuscaProveedor2
        self.textCtrl3.SetLabel("")
        self.textCtrl4.SetLabel("")
        ventana = BuscaProveedor2.Dialog1(self,nombreproveedor)
        try:
            ventana.ShowModal()
            eleccion = ventana.getSeleccion()
        finally:
            ventana.Destroy()
        if eleccion.split(" / ") != ['']:
            self.textCtrl3.SetValue(eleccion.split(" / ")[0])
            self.textCtrl4.SetValue(eleccion.split(" / ")[1])
        self.datePickerCtrl1.SetFocus()
            
